package cn.dengta.webapp.trade.model;

import cn.dengta.common.model.ValueProxy;
import cn.dengta.context.model.LabelI18nProxy;
import lombok.Getter;

import static cn.dengta.context.model.TradeEnumI18nKey.*;

/**
 * 充值订单状态
 * <p>
 * 此枚举还不是最终状态
 */
@Getter
public enum RechargeStatus implements LabelI18nProxy<RechargeStatus, Integer> {

	/** 已关闭 */
	CLOSED(-99, RECHARGE_STATUS_CLOSED),
	/**
	 * 已退款（可能存在部分退款）
	 * 【由于已经退款的金额也要计入充值的数据统计，因此暂不使用该状态，可以通过 refundSum > 0 或 refundCount > 0 来筛选已经退款的订单】
	 */
	@Deprecated
	REFUNDED(-2, RECHARGE_STATUS_REFUNDED),
	/** 退款中 */
	REFUNDING(-1, RECHARGE_STATUS_REFUNDING),
	/** 待支付（初始化订单） */
	INIT(0, RECHARGE_STATUS_INIT),
	/** 处理中 */
	PENDING(1, RECHARGE_STATUS_PENDING),
	/** 已支付（支付成功） */
	OK(2, RECHARGE_STATUS_OK);

	final ValueProxy<RechargeStatus, Integer> proxy;

	// 构造函数，枚举类型只能为私有
	RechargeStatus(Integer value, String label) {
		this.proxy = new ValueProxy<>(this, value, label);
	}

	public static RechargeStatus[] getValues() {
		return ValueProxy.getCachedArray(RechargeStatus.class, RechargeStatus::values);
	}

	public static RechargeStatus of(Integer value) {
		return INIT.getValueOf(value);
	}

}
